
# 对腾讯传过来的openid 进行加密处理保证接口安全
# encrypted v. 把…编码；把…加密（encrypt的过去分词）
from django.conf import settings
from itsdangerous import BadData
from itsdangerous import TimedJSONWebSignatureSerializer


def generate_encrypted_openid(openid):
    '''
        生成加密的openid
    '''

    # 使用TimedJSONWebSignatureSerializer可以生成带有有效期的加密数据
    serializer = TimedJSONWebSignatureSerializer(settings.SECRET_KEY, expires_in=600)  # 有效期10分钟

    # 签名（加密）： dumps(dict)返回bytes类型数据
    return serializer.dumps({'openid':openid}).decode()


def check_encrypted_openid(encrypted_openid):
    '''
    检查openid是否已经过期 是否被篡改
    '''

    serializer = TimedJSONWebSignatureSerializer(
        settings.SECRET_KEY, 600)  # 有效期10分钟

    try:
        data = serializer.loads(encrypted_openid)
    except BadData:
        return None
    else:
        return data.get('openid')